package com.zhongshengnetwork.rightbe.Adv.model;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
//import android.support.v4.content.FileProvider;
import android.util.Log;

import androidx.core.content.FileProvider;

import com.zhongshengnetwork.rightbe.CustomApplication;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

/**
 * 配置 ：配置在清单中 与Activity 同级
 *      //用于7.0以上手机获取手机文件路径方式等不同的设置
 *       <provider
 *        android:name="android.support.v4.content.FileProvider"
 *        android:authorities="com.cn.zaoJu.FileProvider"
 *        android:exported="false"
 *        android:grantUriPermissions="true">
 *        <meta-data
 *        android:name="android.support.FILE_PROVIDER_PATHS"
 *        android:resource="@xml/file_paths" />
 *        </provider>
 *
 *  //配置的 FileProvider 去utils中的 .FileProvider，书写必须一致(字母大小写)
 *
 * 7.0 获取uri 变更，使用provider获取
 */

public class MyUriUtils {


    /**
     * @param mContext 上下文
     * @param path    文件路径
     * @return
     */
    public static Uri getUri(Context mContext, String path){
        Uri uriForFile;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            //uriForFile = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".FileProvider", new File(path));
            uriForFile = getUriFromFile(mContext, new File(path));//Uri.fromFile(new File(path));
            //Log.e("路径",uriForFile.toString());
        }else {
            uriForFile = Uri.fromFile(new File(path));
        }
        return uriForFile;
    }

    public static Uri getUriFromFile(Context context, File file) {
        Uri imageUri;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            imageUri = FileProvider.getUriForFile(context,
                    "com.zhongshengnetwork.rightbe.fileprovider", file);//通过FileProvider创建一个content类型的Uri
        } else {
            imageUri = Uri.fromFile(file);
        }
        return imageUri;
    }

    /**
     * @param mContext 上下文
     * @param  filepath String 类型路径 new 出来的 File
     * @return
     */
    public static Uri getUri(Context mContext, File filepath){
        Uri uriForFile;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){


            uriForFile = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".FileProvider", filepath);

        }else {
            uriForFile = Uri.fromFile(filepath);
        }
        return uriForFile;
    }

    /**
     * @param context 通过已知的本地uri 路径 转成 String 路径
     * @param uri (ActivityResult中的 data.getData() ) 图片路径Uri转 String 路径
     * @return
     */
    public static String getRealFilePath( final Context context, final Uri uri ) {
        if ( null == uri ) return null;
        final String scheme = uri.getScheme();
        String data = null;
        if ( scheme == null )
            data = uri.getPath();
        else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
            data = uri.getPath();
        } else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {
            Cursor cursor = context.getContentResolver().query( uri, new String[] { MediaStore.Images.ImageColumns.DATA }, null, null, null );
            if ( null != cursor ) {
                if ( cursor.moveToFirst() ) {
                    int index = cursor.getColumnIndex( MediaStore.Images.ImageColumns.DATA );
                    if ( index > -1 ) {
                        data = cursor.getString( index );
                    }
                }
                cursor.close();
            }
        }
        return data;
    }
    /**
     * @param path 图片本地路径
     * @return  优化后的bitmap 有效防止图片内存溢出 （用于imageView 设置bitmap图片）
     */
    public static Bitmap getBitmap(String path) {
        InputStream is = null;
        try {
            is = new FileInputStream(path);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //2.为位图设置100K的缓存
        BitmapFactory.Options opts=new BitmapFactory.Options();
        opts.inTempStorage = new byte[100 * 1024];
        //3.设置位图颜色显示优化方式
        //ALPHA_8：每个像素占用1byte内存（8位）
        //ARGB_4444:每个像素占用2byte内存（16位）
        //ARGB_8888:每个像素占用4byte内存（32位）
        //RGB_565:每个像素占用2byte内存（16位）
        //Android默认的颜色模式为ARGB_8888，这个颜色模式色彩最细腻，显示质量最高。但同样的，占用的内存//也最大。也就意味着一个像素点占用4个字节的内存。我们来做一个简单的计算题：3200*2400*4 bytes //=30M。如此惊人的数字！哪怕生命周期超不过10s，Android也不会答应的。
        opts.inPreferredConfig = Bitmap.Config.RGB_565;
        //4.设置图片可以被回收，创建Bitmap用于存储Pixel的内存空间在系统内存不足时可以被回收
        opts.inPurgeable = true;
        //5.设置位图缩放比例
        //width，hight设为原来的四分一（该参数请使用2的整数倍）,这也减小了位图占用的内存大小；例如，一张//分辨率为2048*1536px的图像使用inSampleSize值为4的设置来解码，产生的Bitmap大小约为//512*384px。相较于完整图片占用12M的内存，这种方式只需0.75M内存(假设Bitmap配置为//ARGB_8888)。
        opts.inSampleSize = 1;
        //6.设置解码位图的尺寸信息
        opts.inInputShareable = true;
        //7.解码位图
        return BitmapFactory.decodeStream(is,null, opts);
    }
}
